import pandas as pd

# =====导入数据
df = pd.read_csv(
    # 该参数为数据在电脑中的路径，
    # 要注意字符串转义符号 \ ，可以使用加r变为raw string或者每一个进行\\转义
    filepath_or_buffer=r'../../data/sh600000.csv',
    # 编码格式，不同的文件有不同的编码方式，一般文件中有中文的，编码是gbk，默认是utf8
    # ** 大家不用去特意记住很多编码，我们常用的就是gbk和utf8，切换一下看一下程序不报错就好了
    encoding='gbk',
    nrows=15,
    # 该参数代表跳过数据文件的的第1行不读入
    skiprows=1,
    # 将指定列设置为index。若不指定，index默认为0, 1, 2, 3, 4...
    # index_col=['交易日期'],
)

# print(df)

# 行列加减乘除
# print(df['交易日期'] + ' 15:00:00')  # 字符串列可以直接加上字符串，对整列进行操作
# print(df['收盘价'] * 100)  # 数字列直接加上或者乘以数字，对整列进行操作。
# print(df[['收盘价','成交量']])
# print(df['收盘价'] * df['成交量'])  # 两列之间可以直接操作,计算交易额
# 新增一列
# df['交易日期2'] = df['交易日期'] + ' 00:00:00'
# df['交易所'] = '上交所'
# print(df)


# 统计函数
# print(df['收盘价'].mean())  # 求一整列的均值，自动排除空值
# print(df[['收盘价', '成交量']].mean())  # 求两列的均值
# print(df[['收盘价', '成交量']])
# print(df[['收盘价', '成交量']].mean(axis=0))  # 求两列的均值
# axis=1，代表对整几列进行操作。axis=0（默认）代表对几行进行操作。实际中弄混很正常，到时候试一下就知道了。

# print(df['最高价'].max())  # 最大值
# print(df['最低价'].min())  # 最小值
# print(df['收盘价'].std())  # 标准差
# print(df['收盘价'].count())  # 非空的数据的数量
# print(df['收盘价'].median())  # 中位数
# print(df['收盘价'].quantile(0.25))  # 25%分位数


# df['下周期收盘价'] = df['收盘价'].shift(-1)  # 读取上一行的数据，若参数设定为3，就是读取上三行的数据；若参数设定为-1，就是读取下一行的数据；
# del df['下周期收盘价']  # 删除某一列

# df['涨跌'] = df['收盘价'].diff(1)  # 求本行数据和上一行数据相减得到的值
# df.drop(['涨跌'], axis=1, inplace=True)  # 删除某一列的另外一种方式，inplace参数指是否替代原来的df
# df['涨跌幅'] = df['收盘价'].pct_change(1)  # 类似于diff,但求的是涨跌幅


# cum(cumulative)类函数
# df['累计成交量'] = df['成交量'].cumsum()  # 该列的累加值
# print(df[['交易日期', '成交量', '累计成交量','涨跌幅']])
# print((df['涨跌幅'] + 1.0).cumprod())  # 该列的累乘值，资金曲线


# 其他列函数
# 排名。ascending参数代表是顺序还是逆序。pct参数代表输出的是排名还是排名比例
df['收盘价_排名'] = df['收盘价'].rank(ascending=True, pct=False)
# print(df[['收盘价', '收盘价_排名']])
del df['收盘价_排名']
print(df['收盘价'].value_counts())  # 计数。统计该列中每个元素出现的次数。返回的数据是Series
